//引入视图，如果引入的是html，则得到是字符串,直接供路由的render方法使用
//如果引入的是ejs,则得到一个函数,调用函数就能得到内部的html字符串,调用时候还可以传参作为ejs的变量
import adminListView from '$v/adminList';
// import request from '../util/request';//把做拦截器的axios引进来
import {
  addAdminRequest,
  findAdminListRequest,
  deleteAdminRequest
} from '$a/admin'//引入ajax请求

//封装获取管理员列表的函数
const getAdminList = async (res) => {
  let adminListResult = null;
  try {
    adminListResult = await findAdminListRequest();
    // console.log('re', re);
  } catch (e) {
    alert("获取管理员列表异常:"+e.message)
  }

  res.render(adminListView({
    adminList: adminListResult
  }))
}
export default async (req, res) => {
    // console.log(res)
    await getAdminList(res)
    //在sem路由中,在路由的回调函数中可以获取整个document,所以我们可以在这个位置操作DOM
   
      //添加管理员功能
      //给保存按钮绑定点击事件,添加管理员
      const oSaveAdminBtn = document.querySelector('#saveAdminBtn')
     
      document.onclick = async function(e){//点击保存按钮 获取输入的信息
      //添加管理员逻辑
        if(e.target.id==='saveAdminBtn'){
          const adminNameValue = document.adminForm.adminName.value.trim();//拿到已经去除空格的值
        const passwordValue = document.adminForm.password.value.trim();
        const rePasswordValue = document.adminForm.rePassword.value.trim();
        if(!adminNameValue||!passwordValue||!rePasswordValue){
          return alert('输入内容不能为空')
        }
        if(passwordValue!== rePasswordValue){
          return alert('两次输入密码不一致')
        }
        try {
          await addAdminRequest({//给ajax请求中传数据

            adminName:adminNameValue,
            password:passwordValue,
            regTime:new Date().toLocaleString()

          })

          alert('添加成功')
          //添加点击保存成功后触发关闭表单的事件
          document.querySelector('#closeAdd').click()
          //每次再添加时，把表单重置
          document.adminForm.reset()
          getAdminList(res)

        }catch(e){ 
          alert(e.message+'有异常')
          document.adminForm.reset()
        }
        }


        //删除管理员逻辑
        if(e.target.nodeName==='BUTTON'&&e.target.parentNode.nodeName==='TD'){//节点名称的获取，元素节点的nodeName是大写，详见js阶段的day13
          //获取当前删除按钮对应的adminName（在生成删除按钮的时候，就把自定义属性设置上去）
          const adminName = e.target.dataset.adminname//每个dom对象上都有一个属性dataset,这个属性是个对象，可以通过Dom对象.dataset.属性名，给dom对象上添加这个自定义属性，这样这个dom对象上就会多一个属性data-属性名

        //发送删除请求,将api中的删除的ajax请求调用
         try{
          await  deleteAdminRequest(adminName)
          alert('删除管理员'+adminName+'成功')
          getAdminList(res)
        } catch(e){
          alert('删除管理员'+adminName+'异常')
        }
         //因为在点击每一行的删除按钮时，需要获取到这一行的管理员姓名的值，所以可以写一个自定义属性到adminList.ejs中,属性值就为管理员姓名的值
      }
    }
}